#ifndef _INCLUDE_DEBUG_H_
#define _INCLUDE_DEBUG_H_

// public interface ASSERT(condition)
#ifdef NDEBUG
#define ASSERT(CONDITION) ((void)0)
#else
#define ASSERT(CONDITION) \
  if (CONDITION)          \
  {                       \
  }                       \
  else                    \
  {                       \
    PANIC(#CONDITION);    \
  }
#endif /*NDEBUG*/

// 与函数参数对应
#define PANIC(...) panic_spin(__FILE__, __LINE__, __func__, __VA_ARGS__)

/// @brief 异常 自旋
/// @param filename 文件名
/// @param line 行号
/// @param func 函数名
/// @param condition 条件
void panic_spin(char* filename, int line, const char* func,
                const char* condition);

#endif /*INCLUDE_DEBUG_H*/
